package uno.linze.interview_question.mapper;

import uno.linze.interview_question.domain.Question;
import uno.linze.interview_question.dto.QuestionDTO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
* @author wangy
* @description 针对表【question(面试问题/题目主表)】的数据库操作Mapper
* @createDate 2025-09-27 12:57:25
* @Entity generator.domain.Question
*/
public interface QuestionMapper extends BaseMapper<Question> {

    /**
     * 分页查询题目列表，支持多条件筛选
     * @param offset 偏移量
     * @param size 每页大小
     * @param categoryId 分类ID
     * @param difficulty 难度等级
     * @param tagId 标签ID
     * @param keyword 关键词
     * @return 题目列表
     */
    List<QuestionDTO> selectQuestionsWithPagination(@Param("offset") Integer offset,
                                                   @Param("size") Integer size,
                                                   @Param("categoryId") Integer categoryId,
                                                   @Param("difficulty") Integer difficulty,
                                                   @Param("tagId") Integer tagId,
                                                   @Param("keyword") String keyword);

    /**
     * 查询符合条件的题目总数
     * @param categoryId 分类ID
     * @param difficulty 难度等级
     * @param tagId 标签ID
     * @param keyword 关键词
     * @return 总数
     */
    Long countQuestionsWithConditions(@Param("categoryId") Integer categoryId,
                                    @Param("difficulty") Integer difficulty,
                                    @Param("tagId") Integer tagId,
                                    @Param("keyword") String keyword);

    /**
     * 根据ID查询题目详情
     * @param id 题目ID
     * @return 题目详情
     */
    QuestionDTO selectQuestionById(@Param("id") Integer id);

    /**
     * 插入新题目并返回生成的ID
     * @param question 题目实体
     * @return 插入的行数
     */
    int insertQuestion(Question question);

    /**
     * 根据ID更新题目信息
     * @param question 题目实体
     * @return 更新的行数
     */
    int updateQuestionById(Question question);
}
